C.S.Burner 🪙 ━►🔥GIT Node
tests/backend/test_query_join_perf.py dev (2bf00cb3) Text, 10.34 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Oracles for conversation and announce list joins.
Contact OR-joins must not multiply rows. Announce COUNT must equal the
number of matching announce rows. Conversation list SQL must not GROUP BY
the summaries table (that blocks LIMIT from using latest_message_id).
"""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787secrets
Tff7b72import T7ee787tempfile
Tff7b72import T7ee787time
Tff7b72import T7ee787unittest
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787announce_manager Tff7b72import Te6edf3AnnounceManager
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3Database
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787databaseT7ee787.T7ee787provider Tff7b72import Te6edf3DatabaseProvider
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787message_handler Tff7b72import Te6edf3MessageHandler
Tff7b72def Td2a8ff_reset_providerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instanceTff7b72.Td2a8ffclose_allTb4b4b4(Tb4b4b4)
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_messageTb4b4b4(Te6edf3peer_hashTb4b4b4, Te6edf3iTb4b4b4, Tff7b72*Tb4b4b4, Te6edf3contentTff7b72=Ta5d6ff"Ta5d6ffhelloTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4: Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsource_hashTa5d6ff"Tb4b4b4: Te6edf3peer_hashTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fflocalhashlocalhashlocalhashlo12Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpeer_hashTa5d6ff"Tb4b4b4: Te6edf3peer_hashTb4b4b4,
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdeliveredTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4: T79c0ff1.0Tb4b4b4,
Ta5d6ff"Ta5d6ffis_incomingTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4,
Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdirectTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdelivery_attemptsTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4,
Ta5d6ff"Ta5d6ffnext_delivery_attempt_atTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6fftTffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Te6edf3contentTb4b4b4,
Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4: Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4: Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3iTb4b4b4,
Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Tff7b72-T79c0ff50Tb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: T79c0ff5.0Tb4b4b4,
Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff3Tb4b4b4,
Ta5d6ff"Ta5d6ffis_spamTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4,
Ta5d6ff"Ta5d6ffreply_to_hashTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ff_announceTb4b4b4(Te6edf3destTb4b4b4, Te6edf3identTb4b4b4, Te6edf3aspectTff7b72=Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destTb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4: Te6edf3identTb4b4b4,
Ta5d6ff"Ta5d6ffidentity_public_keyTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpubkey_Ta5d6ff" Tff7b72+ Te6edf3destTb4b4b4[Tb4b4b4:T79c0ff8Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffapp_dataTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffappdataTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Tff7b72-T79c0ff50Tb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: T79c0ff5.0Tb4b4b4,
Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff3Tb4b4b4,
Tb4b4b4}
Tff7b72class T56d364TestQueryJoinPerfTb4b4b4(Te6edf3unittestTff7b72.Td2a8ffTestCaseTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffsetUpTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3_reset_providerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftmp Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Te6edf3DatabaseTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8fftmpTff7b72.Td2a8ffnameTffd700}Ta5d6ff/database.dbTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhandler Tff7b72= Te6edf3MessageHandlerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdbTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffannounce_mgr Tff7b72= Te6edf3AnnounceManagerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdbTb4b4b4)
Tff7b72def Td2a8fftearDownTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3_reset_providerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftmpTff7b72.Td2a8ffcleanupTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_announce_count_ignores_matching_contactsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3ident Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(Te6edf3_announceTb4b4b4(Te6edf3destTb4b4b4, Te6edf3identTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffByIdentTa5d6ff"Tb4b4b4,
Te6edf3remote_identity_hashTff7b72=Te6edf3identTb4b4b4,
Te6edf3custom_imageTff7b72=Ta5d6ff"Ta5d6ffimg-aTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3other_ident Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffByLxmfTa5d6ff"Tb4b4b4,
Te6edf3remote_identity_hashTff7b72=Te6edf3other_identTb4b4b4,
Te6edf3lxmf_addressTff7b72=Te6edf3destTb4b4b4,
Te6edf3custom_imageTff7b72=Ta5d6ff"Ta5d6ffimg-bTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3count Tff7b72= Tff7b72selfTff7b72.Td2a8ffannounce_mgrTff7b72.Td2a8ffget_filtered_announces_countTb4b4b4(Te6edf3aspectTff7b72=Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3countTb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3rows Tff7b72= Tff7b72selfTff7b72.Td2a8ffannounce_mgrTff7b72.Td2a8ffget_filtered_announcesTb4b4b4(
Te6edf3aspectTff7b72=Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4,
Te6edf3limitTff7b72=T79c0ff50Tb4b4b4,
Tb4b4b4)
Te6edf3dests Tff7b72= Tb4b4b4[Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3r Tff7b72in Te6edf3rowsTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3destsTff7b72.Td2a8ffcountTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Te6edf3rowsTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcontact_imageTa5d6ff"Tb4b4b4)Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ffimg-aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffimg-bTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_announce_count_sql_does_not_join_contactsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3captured Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3real Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchone
Tff7b72def Td2a8ffwrapTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3capturedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3queryTb4b4b4)
Tff7b72return Te6edf3realTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchone Tff7b72= Te6edf3wrap
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffannounce_mgrTff7b72.Td2a8ffget_filtered_announces_countTb4b4b4(Te6edf3aspectTff7b72=Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchone Tff7b72= Te6edf3real
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3capturedTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3sql Tff7b72= Te6edf3capturedTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6ffcount(*)Ta5d6ff"Tb4b4b4, Te6edf3sqlTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertNotInTb4b4b4(Ta5d6ff"Ta5d6ffcontactsTa5d6ff"Tb4b4b4, Te6edf3sqlTb4b4b4)
Tff7b72def Td2a8fftest_conversation_list_one_row_with_two_matching_contactsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3peer Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffupsert_lxmf_messageTb4b4b4(Te6edf3_messageTb4b4b4(Te6edf3peerTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3contentTff7b72=Ta5d6ff"Ta5d6ffhiTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffIdentNameTa5d6ff"Tb4b4b4,
Te6edf3remote_identity_hashTff7b72=Te6edf3peerTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffLxmfNameTa5d6ff"Tb4b4b4,
Te6edf3remote_identity_hashTff7b72=Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4,
Te6edf3lxmf_addressTff7b72=Te6edf3peerTb4b4b4,
Tb4b4b4)
Te6edf3rows Tff7b72= Tff7b72selfTff7b72.Td2a8ffhandlerTff7b72.Td2a8ffget_conversationsTb4b4b4(Ta5d6ff"Ta5d6fflocalTa5d6ff"Tb4b4b4, Te6edf3limitTff7b72=T79c0ff50Tb4b4b4)
Te6edf3peers Tff7b72= Tb4b4b4[Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffpeer_hashTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3r Tff7b72in Te6edf3rowsTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3peersTff7b72.Td2a8ffcountTb4b4b4(Te6edf3peerTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3match Tff7b72= Tffa657nextTb4b4b4(Te6edf3r Tff7b72for Te6edf3r Tff7b72in Te6edf3rows Tff7b72if Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffpeer_hashTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3peerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3matchTb4b4b4[Ta5d6ff"Ta5d6ffcontact_nameTa5d6ff"Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffIdentNameTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657intTb4b4b4(Te6edf3matchTb4b4b4[Ta5d6ff"Ta5d6ffis_contactTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72def Td2a8fftest_conversation_list_sql_has_no_group_byTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3captured Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3real Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall
Tff7b72def Td2a8ffwrapTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3capturedTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3realTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall Tff7b72= Te6edf3wrap
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhandlerTff7b72.Td2a8ffget_conversationsTb4b4b4(Ta5d6ff"Ta5d6fflocalTa5d6ff"Tb4b4b4, Te6edf3limitTff7b72=T79c0ff50Tb4b4b4, Te6edf3offsetTff7b72=T79c0ff0Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall Tff7b72= Te6edf3real
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3capturedTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3sqlTb4b4b4, Te6edf3params Tff7b72= Te6edf3capturedTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffassertNotInTb4b4b4(Ta5d6ff"Ta5d6ffGROUP BYTa5d6ff"Tb4b4b4, Te6edf3sqlTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6ffORDER BY s.latest_message_id DESCTa5d6ff"Tb4b4b4, Te6edf3sqlTb4b4b4)
Te6edf3plan_rows Tff7b72= Te6edf3realTb4b4b4(Ta5d6ff"Ta5d6ffEXPLAIN QUERY PLAN Ta5d6ff" Tff7b72+ Te6edf3sqlTb4b4b4, Te6edf3paramsTb4b4b4)
Te6edf3plan Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Tffa657strTb4b4b4(Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffdetailTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72for Te6edf3r Tff7b72in Te6edf3plan_rowsTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertNotInTb4b4b4(Ta5d6ff"Ta5d6ffgroup byTa5d6ff"Tb4b4b4, Te6edf3planTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(
Ta5d6ff"Ta5d6ffidx_lxmf_conversation_summaries_latest_idTa5d6ff" Tff7b72in Te6edf3plan Tff7b72or Ta5d6ff"Ta5d6ffsummariesTa5d6ff" Tff7b72in Te6edf3planTb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ffexpected summaries index in plan, got: Tffd700{Te6edf3planTffd700}Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_related_announces_batch_one_in_queryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3ident_a Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3ident_b Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(
Te6edf3_announceTb4b4b4(Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4, Te6edf3ident_aTb4b4b4, Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(
Te6edf3_announceTb4b4b4(Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4, Te6edf3ident_aTb4b4b4, Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(
Te6edf3_announceTb4b4b4(Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4, Te6edf3ident_bTb4b4b4, Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3captured Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3real Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall
Tff7b72def Td2a8ffwrapTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3capturedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3queryTb4b4b4)
Tff7b72return Te6edf3realTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall Tff7b72= Te6edf3wrap
Tff7b72tryTb4b4b4:
Te6edf3rows Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_announces_for_identity_hashesTb4b4b4(
Tb4b4b4[Te6edf3ident_aTb4b4b4, Te6edf3ident_bTb4b4b4]Tb4b4b4,
Te6edf3aspectsTff7b72=Tb4b4b4[Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall Tff7b72= Te6edf3real
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3capturedTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6ffidentity_hash INTa5d6ff"Tb4b4b4, Te6edf3capturedTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3rowsTb4b4b4)Tb4b4b4, T79c0ff3Tb4b4b4)
Te6edf3index Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffindex_announces_by_identity_aspectTb4b4b4(Te6edf3rowsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Tb4b4b4(Te6edf3ident_aTb4b4b4, Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3indexTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Tb4b4b4(Te6edf3ident_aTb4b4b4, Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3indexTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Tb4b4b4(Te6edf3ident_bTb4b4b4, Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3indexTb4b4b4)
Tff7b72def Td2a8fftest_get_announces_limit_does_not_load_all_rowsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3ident Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72for Te6edf3_ Tff7b72in Tffa657rangeTb4b4b4(T79c0ff8Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(
Te6edf3_announceTb4b4b4(Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4, Te6edf3identTb4b4b4, Ta5d6ff"Ta5d6fflxmf.propagationTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3page Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_announcesTb4b4b4(Te6edf3aspectTff7b72=Ta5d6ff"Ta5d6fflxmf.propagationTa5d6ff"Tb4b4b4, Te6edf3limitTff7b72=T79c0ff3Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3pageTb4b4b4)Tb4b4b4, T79c0ff3Tb4b4b4)
Te6edf3all_rows Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_announcesTb4b4b4(Te6edf3aspectTff7b72=Ta5d6ff"Ta5d6fflxmf.propagationTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3all_rowsTb4b4b4)Tb4b4b4, T79c0ff8Tb4b4b4)
Tff7b72def Td2a8fftest_identity_hash_lookup_is_equality_not_likeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3captured Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3real Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall
Tff7b72def Td2a8ffwrapTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3capturedTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3realTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall Tff7b72= Te6edf3wrap
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_filtered_announcesTb4b4b4(
Te6edf3aspectTff7b72=Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4,
Te6edf3identity_hashTff7b72=Ta5d6ff"Ta5d6ffabc123Ta5d6ff"Tb4b4b4,
Te6edf3limitTff7b72=T79c0ff1Tb4b4b4,
Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall Tff7b72= Te6edf3real
Te6edf3sqlTb4b4b4, Te6edf3params Tff7b72= Te6edf3capturedTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6ffidentity_hash = ?Ta5d6ff"Tb4b4b4, Te6edf3sqlTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertNotInTb4b4b4(Ta5d6ff"Ta5d6ffLIKETa5d6ff"Tb4b4b4, Te6edf3sqlTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6ffabc123Ta5d6ff"Tb4b4b4, Te6edf3paramsTb4b4b4)
Tff7b72def Td2a8fftest_notification_viewed_map_is_one_queryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3peer_a Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3peer_b Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffimport_notification_viewed_stateTb4b4b4(
Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3peer_aTb4b4b4,
Ta5d6ff"Ta5d6fflast_viewed_atTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff2030-01-01T00:00:00+00:00Ta5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Te6edf3captured Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3real Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall
Tff7b72def Td2a8ffwrapTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3capturedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3queryTb4b4b4)
Tff7b72return Te6edf3realTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall Tff7b72= Te6edf3wrap
Tff7b72tryTb4b4b4:
Te6edf3viewed Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffget_notification_last_viewed_at_mapTb4b4b4(
Tb4b4b4[Te6edf3peer_aTb4b4b4, Te6edf3peer_bTb4b4b4, Te6edf3peer_aTb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchall Tff7b72= Te6edf3real
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3capturedTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertInTb4b4b4(Ta5d6ff"Ta5d6ffIN (?, ?)Ta5d6ff"Tb4b4b4, Te6edf3capturedTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffnotification_viewed_coversTb4b4b4(
Te6edf3viewedTff7b72.Td2a8ffgetTb4b4b4(Te6edf3peer_aTb4b4b4)Tb4b4b4,
Te6edf3nowTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertFalseTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffnotification_viewed_coversTb4b4b4(
Te6edf3viewedTff7b72.Td2a8ffgetTb4b4b4(Te6edf3peer_bTb4b4b4)Tb4b4b4,
Te6edf3nowTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffis_notification_viewedTb4b4b4(Te6edf3peer_aTb4b4b4, Te6edf3nowTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertFalseTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffis_notification_viewedTb4b4b4(Te6edf3peer_bTb4b4b4, Te6edf3nowTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_destination_hash_bulk_query_does_not_duplicateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3ident Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(Te6edf3_announceTb4b4b4(Te6edf3destTb4b4b4, Te6edf3identTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffATa5d6ff"Tb4b4b4, Te6edf3remote_identity_hashTff7b72=Te6edf3identTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffBTa5d6ff"Tb4b4b4,
Te6edf3remote_identity_hashTff7b72=Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4,
Te6edf3lxmf_addressTff7b72=Te6edf3destTb4b4b4,
Tb4b4b4)
Te6edf3rows Tff7b72= Tff7b72selfTff7b72.Td2a8ffannounce_mgrTff7b72.Td2a8ffget_announces_for_destination_hashesTb4b4b4(
Tb4b4b4[Te6edf3destTb4b4b4]Tb4b4b4,
Te6edf3aspectsTff7b72=Tb4b4b4[Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3rowsTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3rowsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3destTb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3unittestTff7b72.Td2a8ffmainTb4b4b4(Tb4b4b4)
Served by rngit 1.4.2 - Generated in 0.03s